\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx} 
\usepackage{a4wide}
\author{Ezequiel Velea, Andr�s Peralta}
\title{Documento de Dise�o}
\begin{document}

\begin{center}
\begin{Large}\textbf{Documento de Dise�o de Software:\underline{}}\end{Large}\\

Generaci�n de Recomendaciones para terapias Antivirales del VIH.\\
\end{center}
Andr�s Peralta\\
Ezequiel Velez\\

\section{Introducci�n:}
El siguiente documento presenta las fases de dise�o de Arquitectura as� como el dise�o de Alto Nivel con sus respectivos diagramas y especificaciones. Luego se da una descripci�n del dise�o detallado denotando metodos y algoritmos utilizados.
Incluimos la estandarizaci�n de este documento bajo la norma IEEE 1016-1998.

\section{Abreviaturas, Definiciones y Acr�nimos:}

\section{Referencias:}
\begin{enumerate}
	\item Object Oriented Analysis and Design - Grady Booch 1998.
	\item Design Patterns - Gamma, Helm, Johnson, Vlisides 1998.
	\item Object Oriented Principies - http://www.objectmentor.com/resources/publishedArticles.html
	\item Law of Demeter - http://www.ccs.neu.edu/home/lieber/LoD.html
	\item Antipatterns: Identification, Refactoring and Management -Laplante, Phillip A.; Colin J. Neill (2005). ISBN 0-8493-2994-9.
	\item UML Web Page - http://www.uml.org/
	\item IEEE Std 1016-1998 IEEE Recommended Practice for Software Design Descriptions\\
	     - http://standards.ieee.org/reading/ieee/std\_public/new\_desc/se/1016-1998.html
	\item A Software Design Specification Template - http://www.cmcrossroads.com/bradapp/docs/sdd.html
\end{enumerate}

\section{Dise�o de Arquitectura:}
	\subsection{Introducci�n:}
	Como primer nivel de dise�o presentamos la arquitectura del sistema. Esta representa los componentes y tecnolog�as que forman parte del sistema a desarrollar y como se comunican.
	
	\subsection{Vista Arquitect�nica:}
	A continuaci�n se muestra el diagrama de la arquitectura planteada.(figura 1)
	
	\begin{figure}
  	\centering
  %  \includegraphics[width=\linewidth]{Arquitectura.jpeg}
  	\caption{Arquitectura del sistema} 
	\end{figure}  
	
	
	\subsection{Cat�logo de Componentes:}
		\begin{itemize}
		\item \textbf{System:} Aplicaci�n principal que consiste de los componentes descritos a continuaci�n.		
		\item \textbf{Main Program:}Es el componente principal del sistema y que coordina las distintas componentes para la ejecuci�n. Tiene la tarea de comunicarse directamente con la GUI para incorporar y mostrar los datos, as� como solicitar la carga de un plugin al Plugin Administrator y ejecutar la generaci�n del �rbol y el posterior Ranking de las terapias.
		\item \textbf{Plugin:} m�dulo cargable al que se le delegan funcionalidades en tiempo de ejecuci�n que se acopla al sistema para aumentarlo o modificarlo.
		\item \textbf{Qt:}Biblioteca multiplataforma para desarrollar interfaces gr�ficas.
		\item \textbf{GUI:}Interfaz gr�fica del sistema.
		\item \textbf{BioPP:} Biblioteca para la manipulaci�n de cadenas de amino�cidos/prote�nas.
		\item \textbf{Antiviral Data Base:} Almacenamiento de datos asociados a AV's. En este caso es indiferente el tipo de Base de Datos utilizada. Solo nos interesa el acceso a su contenido. En particular almacenaremos los datos de los antivirales en un archivo XML y comunicaremos esta con el sistema a trav�s de FXP.
		\item \textbf{Plugin Administrator: }Administra los plugins que modifican funcionalidad del sistema, haciendo los respectivos checkeos de consistencia con el sistema.
		\item \textbf{Tree Generator:} modulo encargado de generar el �rbol de b�squeda, tomando en cuenta las modificaciones incorporadas a trav�s del plugin.
		\item \textbf{Antivirals Selector:} modulo que a partir de los par�metros combinatorios establecidos por el usuario establece cuales son los conjuntos de antivirales aplicables a una secuencia determinada.
		\item \textbf{Ranker:}modulo que genera una lista ordenada de terapias, de m�s a menos eficiente, ponder�ndolas de acuerdo a los par�metros establecidos por el usuario.		
		\end{itemize}
	\subsection{Fundamentos de la Arquitectura:}
	La subdivisi�n b�sica propuesta denota los cuatro elementos principales del sistema. Los cuales son: el plugin, las librer�as externas, la base de Datos y el sistema propiamente dicho.

	\subsection{Descripci�n:}
		\begin{itemize}
		\item Inicialmente el usuario selecciona un plugin en particular.
		\item Main Program incorpora el plugin al sistema mediante el Plugin Administrator.
		\item En este paso el usuario establece los par�metros del plugin.
		\item El usuario interactua con la GUI estableciendo los datos iniciales.
		\item Antivirals Selector puede leer datos de la Base de Datos.
		\item El generador de �rbol interact�a con Antivirals Selector cada vez que va a ramificar un nodo.
		\item Luego se va generando una lista de terapias a partir del �rbol de terapias.
		\item El Ranker ordena las terapias obtenidas.
		\item La GUI recibe la lista de terapias ordenadas por Ranker a trav�s de Main Program.
		\item El usuario recibe los resultados en un formato adecuado, a trav�s de la GUI. 
		\end{itemize}                
		
\section{Dise�o Orientado a Objetos:}
	\subsection{Introducci�n:}
	Por debajo de la arquitectura describimos el dise�o de alto nivel orientado a objetos desglosando cada componente en conjuntos de clases y las relaciones centre ellas. El esquema que utilizaremos es el de Responsibility Driven Design el cual le asigna a cada clase una responsabilidad dentro del sistema y como afecta al resto de las clases con las que interact�a.
	
	\subsection{Diagrama de Paquetes:}
	Para poder explicar de forma m�s ordenada como es la relaci�n de las clases, describimos un diagrama de paquetes donde cada paquete contiene un conjunto de clases que agrupan un determinado concepto. La figura 2 muestra el diagrama de paquetes.
	
	\begin{figure}
  	\centering
  %  \includegraphics[width=\linewidth]{Paquetes.jpeg}
  	\caption{Diagrama de Paquetes.} 
	\end{figure} 
	
		\subsubsection{Descripci�n de los Paquetes:}
		Describimos cada paquete del diagrama.
		
			\begin{itemize}
			\item Virus: concepto virus  y las clases m�s b�sicas que lo conforman.
			\item Tree:  concepto �rbol (�rbol, nodo, arista).
			\item TherapyGen: generaci�n del �rbol de terapias.
			\item Antivirals: concepto de antivirales junto con la base de datos y su iterador.
			\item Combination: generaci�n de combinaciones de antivirales y su iterador.
			\item Therapy: concepto de una terapia concreta.
			\item Rank: ranker de terapias.
			\item PluginAdmin: administraci�n del plugin y factory para la pol�tica de b�squeda.			
			\item Main: programa principal.
			\item GUI: interfaz con el usuario.
			\end{itemize}	
                         	
	\subsection{Diagrama de Clases:}
	Primero presentamos el diagrama de clases (figura 3) en su totalidad y luego describiremos cada clase con sus detalles.
	Antes de numerarlas introduciremos algunos patterns utilizados en algunas de las clases.
	
	\begin{itemize}
	\item Iterator:
	\item Factory:
	\item Observer:	
	\end{itemize}

	\begin{figure}
  	\centering
   % \includegraphics[width=\linewidth]{Clases.jpeg}
  	\caption{Diagrama de Clases.} 
	\end{figure} 
	
	\subsection{Descripci�n de las Clases:}
	A continuaci�n describimos cada clase en detalle con sus atributos y m�todos. Vale aclarar que hay m�todos impl�citos que no son colocados en la descripci�n, como ser los accesores ($get$) y modificadores ($set$) que involucran a los atributos de la clase.
		\subsubsection{Nombre de la clase: Virus}
			\begin{itemize}
			\item Descripci�n: implementa el concepto abstracto de Virus.			
			\item Atributos:
				\begin{enumerate}
				\item $name$: nombre particular de la secuencia.
				\item $sequence$: secuencia ADN/ARN de la cepa del virus.
				\item $length$: longitud de la secuencia.
				\item $id$: numero que representa de forma �nica la secuencia.
				\end{enumerate}			
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: Tree}
			\begin{itemize}
			\item Descripci�n: Representa el concepto de �rbol como un conjunto de aristas.
			\item Atributos:
				\begin{enumerate}
				\item $edges$: conjunto de aristas que lo conforman.
				\item $root$: nodo ra�z
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $getMaxDepth()$: retorna la profundidad max del �rbol.
				\item $getMinDepth()$: retorna la profundidad min del �rbol.
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: Edge}
			\begin{itemize}
			\item Descripci�n: Representa el concepto de arista como un par de nodos.
			\item Atributos:
				\begin{enumerate}
				\item $nodes$: Par de nodos que forman la arista.
 				\item $value$: Valor que contiene la arista, en este caso, un conjunto de antivirales.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $isLeaf$: nos dice si el nodo hijo de una arista es una hoja.    
				\end{enumerate}	
			\end{itemize}
		
		\subsubsection{Nombre de la Clase: Node}
			\begin{itemize}
			\item Descripci�n: Representa el concepto de nodo.
			\item Atributos:
				\begin{enumerate}
				\item $edges$: lista de aristas a los que pertenece.
				\item $sequence$: el valor del nodo es una secuencia.
				\end{enumerate}			
			\end{itemize}			
			
		\subsubsection{Nombre de la Clase: TherapyGenerator}
			\begin{itemize}
			\item Descripci�n: Representa el objeto que genera el �rbol de terapias.
			\item Atributos:
				\begin{enumerate}
				\item $state$: estado del objeto. Es utilizado por el observador.			
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $generateTree(initSequence:Virus, min:int, max:int)$: genera el espacio de b�squeda a partir de la secuencia inicial, y los valores de combinaci�n min y max.
				\item $getState$: devuelve el estado del objeto. Este m�todo se comunica con el observador de esta clase. 
				\item $setState$: asigna un estado al objeto.
				\end{enumerate}	
			\end{itemize}			
			
		\subsubsection{Nombre de la Clase: TherapyGenInterface}
			\begin{itemize}
			\item Descripci�n: Interfaz de TherapyGenerator.			
			\item M�todos:
				\begin{enumerate}
				\item $generateTree()$: abstrae la llamada a la funci�n generateTree(...) de la clase concreta.
				\item $Notify$: utilizado para notificar el cambio de estado del observador.
				\item $attach(o:observer)$: define un observador.
				\item $detach(o:observer)$: desliga un observador.
				\end{enumerate}	
			\end{itemize}
			
				
		\subsubsection{Nombre de la Clase: Program}
			\begin{itemize}
			\item Descripci�n: Clase principal que invoca todas las operaciones m�s importantes del sistema.
			\item Atributos:
				\begin{enumerate}
				\item $init\_sequence$: secuencia inicial con la que se comienza el c�lculo.
				\item $max\_combinatory$: valor m�ximo para la selecci�n de antivirales.
				\item $min\_combinatory$: valor m�nimo para la selecci�n de antivirales.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $runProgram(initSequence:Virus, max: int, min:int)$: a partir de la secuencia inicial y los valores m�ximos y m�nimos de combinatoria comienza el proceso de generaci�n del �rbol.
				\end{enumerate}	
			\end{itemize}
				
		\subsubsection{Nombre de la Clase: Ranker}
			\begin{itemize}
			\item Descripci�n: Clase que elabora el Ranking de terapias.
			\item Atributos:
				\begin{enumerate}
				\item $id$: identificador en caso de que se elaboren otros Rankings.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $orderTherapies(List of Therapies)$: una vez listadas las terapias obtenidas, el Ranker genera el listado m�s optimo de terapias.
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: TherapiesIterator}
			\begin{itemize}
			\item Descripci�n: Iterador para acceder al listado de terapias sin tener en cuenta la representaci�n concreta de ellas.
			\item Atributos:
				\begin{enumerate}
				\item $index$: n�mero que establece la posici�n de iteraci�n.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $next()$: siguiente elemento de la lista.
				\item $first()$: primer elemento de la lista.
				\item $isDone()$: verifica si la lista lleg� a su fin.
				\item $currentItem()$: retorna el elemento de la lista en el cual esta posado el iterador.   
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: TherapyObserver}
			\begin{itemize}
			\item Descripci�n: observa a la clase TherapyGenerator en busca de cambios en su estado.
			\item M�todos:
				\begin{enumerate}
				\item $update()$: actualiza los valores respecto a la clase observada.
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: Therapy}
			\begin{itemize}
			\item Descripci�n: Clase concreta para representar una terapia.
			\item Atributos:
				\begin{enumerate}
				\item $id$: identificador �nico de la terapia.
				\item $list$: listado ordenado de antivirales que conforman esa terapia.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $getAntiviralList()$: retorna la lista de antivirales que conforman la terapia(la lista esta ordenada por orden de aplicaci�n).
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: TherapyGenInterface}
			\begin{itemize}
			\item Descripci�n:Interfaz del generador de terapias.			
			\item M�todos:
				\begin{enumerate}
				\item $generateTherapies()$: abstracci�n del m�todo con que lleva el mismo nombre en la clase concreta.
				\end{enumerate}	
			\end{itemize}			
			
		\subsubsection{Nombre de la Clase: ScoreTherapy}
			\begin{itemize}
			\item Descripci�n:implementa la funci�n de scoring a una terapia.			
			\item M�todos:
				\begin{enumerate}
				\item $socre()$: aplica el scoring definido en el plugin a una terapia.
				\end{enumerate}	
			\end{itemize}	
					
		\subsubsection{Nombre de la Clase: FactorySearchPolicy}
			\begin{itemize}
			\item Descripci�n: con este factory generamos la pol�tica de b�squeda que se selecciona dentro de la configuraci�n del plugin.
			\item M�todos:
				\begin{enumerate}
				\item $createSearchPolicy$: determina el algoritmo de b�squeda utilizado para obtener las terapias.
				\end{enumerate}
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: PluginInterface}
			\begin{itemize}
			\item Descripci�n: Interfaz del Plugin.
			\item M�todos:
				\begin{enumerate}
				\item $scoring()$: abstracci�n del m�todo que implementa la funci�n de scoring.
				\item $getSearchPolicy()$: selecci�n del algoritmo de b�squeda.
                \item $getParams()$: abstracci�n del m�todo que retorna los par�metros.
				\end{enumerate}	
			\end{itemize}	
			
		\subsubsection{Nombre de la Clase: PluginAdmin}
			\begin{itemize}
			\item Descripci�n: Clase concreta que se encarga de la interacci�n entre el plugin y el sistema.
			\item M�todos:
				\begin{enumerate}
				\item $loadPlugin(name:Plugin)$:incorpora un plugin al sistema.
				\item $unloadPlugin(name:Plugin)$: desacopla plugin del sistema.
				\item $checkPlugin(name:Plugin)$: verifica si el plugin es consistente con el sistema y la Base de Datos.
				\end{enumerate}	
			\end{itemize}

		\subsubsection{Nombre de la Clase: Antiviral}
			\begin{itemize}
			\item Descripci�n: Clase concreta que implementa el concepto de antiviral.
			\item Atributos:
				\begin{enumerate}				
				\item $name$: nombre del antiviral.
                \item $id$: identificador �nico.
				\item $type$: tipo de antiviral ya sea RT o PI.
				\item $class$: clase del antiviral, ya sea PI, NRTI o NNRTI.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $getMutants(sequence:Virus)$: retorna el conjunto de mutantes resultado de aplicar este antiviral.
                \item $applies(sequence:Virus)$: retorna verdadero si el antiviral se puede aplicar a la secuencia.  
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: AntiviralsIterator}
			\begin{itemize}
			\item Descripci�n: Iterador para acceder a la Base de Datos de antivirales sin tener en cuenta la representaci�n concreta de ella.
			\item Atributos:
				\begin{enumerate}
				\item $index$: n�mero que establece la posici�n de iteraci�n.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $next()$: siguiente antiviral.
				\item $first()$: primer antiviral.
				\item $isDone()$: verifica si es el �ltimo.
                \item $currentItem(index)$: retorna el antiviral en el cual se encuentra el �ndice. 
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: DataBase}
			\begin{itemize}
			\item Descripci�n: clase concreta que interact�a con la base de datos de antivirales.
			\item Atributos:
				\begin{enumerate}
				\item $name$: nombre de la base de datos.
				\item $serverType$: en caso que se quiera definir algun otro tipo de servidor de la base de datos.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $load()$: carga la base de datos.
				\item $getIterator()$: obtiene el iterador que recorre los antivirales.
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: AntiviralsSelector}
			\begin{itemize}
			\item Descripci�n: Clase concreta que provee funcionalidad para manejar la interacci�n entre los virus y los antivirales.
			\item Atributos:
				\begin{enumerate}				
				\item $min\_combinatory$: valor que establece el min tama�o se conjunto de Antivirales.
                \item $max\_combinatory$: valor que establece el max tama�o se conjunto de Antivirales.
                \item $init\_sequence$: secuencia con la cual voy a interactuar.
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $selecAvirals():$ retorna el conjunto de antivirales que aplican a una secuencia.
				\end{enumerate}	
			\end{itemize}
						
		\subsubsection{Nombre de la Clase: Combination}
			\begin{itemize}
			\item Descripci�n: denotamos las combinaciones de antivirales.
			\item Atributos:
				\begin{enumerate}				
				\item $min\_combinatory$: valor que establece el min tama�o se conjunto de AV's.
                \item $max\_combinatory$: valor que establece el max tama�o se conjunto de AV's.                
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $combinatorial:$ genera al combinatoria de antivirales entre min y max.
				\end{enumerate}	
			\end{itemize}
			
		\subsubsection{Nombre de la Clase: CombinationsIterator}
			\begin{itemize}
			\item Descripci�n: iterador que recorre la lista de combinaciones de antivirales que es utilizada al generar el �rbol de terapias.
			\item Atributos:
				\begin{enumerate}				
				\item $index$: n�mero que establece la posici�n de iteraci�n.              
				\end{enumerate}
			\item M�todos:
				\begin{enumerate}
				\item $next()$: siguiente antiviral.
				\item $first()$: primer antiviral.
				\item $isDone()$: verifica si es el �ltimo.
                \item $currentItem(index)$: retorna el antiviral en el cual se encuentra el �ndice. 
				\end{enumerate}	
			\end{itemize}
		

	
	\subsection{Diagrama Din�mico:}
	El diagrama de clase representa al sistema en forma est�tica. Ahora describiremos como se comporta en forma din�mica mostrando primero la interacci�n entre los paquetes, y luego dentro de cada unos de ellos, los diagrama din�micos entre sus clases.
	\subsubsection{Diagrama:}
	
		\begin{figure}
  		\centering
    	%\includegraphics[width=\linewidth]{Secuencia2.jpeg}
  		\caption{Diagrama Din�mico de paquetes.} 
		\end{figure}
		
		A continuaci�n presentamos el diagrama din�mico de el administrador de Plugins	
	
		\begin{figure}
  		\centering
    	%\includegraphics[width=\linewidth]{Secuencia1.jpeg}
  		\caption{Diagrama Din�mico plugins.} 
		\end{figure}		
		
	\subsubsection{Fundamentos:}
	
	
\section{Dise�o Detallado:}


\end{document}